home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / networke / xfirepow.000 / xfirepow / xfirepower-0.84 / client / message.c < prev    next >
C/C++ Source or Header  |  1995-05-30  |  4KB  |  176 lines

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "Wlib.h"
  4. #include "defs.h"
  5. #include "data.h"
  6. #include "struct.h"
  7. #include "proto.h"
  8.  
  9. static char mess_buf[80];
  10. static int mess_pos = 0, dest = -1;
  11.  
  12. void start_message()
  13. {
  14.     message_mode = 1;
  15.     W_DefineTextCursor(cwin);
  16.     W_DefineTextCursor(mapwin);
  17. }
  18.  
  19. void end_message()
  20. {
  21.     message_mode = 0;
  22.     W_RevertCursor(cwin);
  23.     W_RevertCursor(mapwin);
  24. }
  25.  
  26. void print_message(char *msg, int from, int to)
  27. {
  28.     char mbuf[100];
  29.     W_Color color;
  30.     W_Window mw;
  31.  
  32.     if(from == M_SRV) {
  33.     strcpy(mbuf, "SRV->");
  34.     color = W_White;
  35.     } else if(from < MAXPLAYERS){
  36.     sprintf(mbuf, "  %c->", players[from].p_char);
  37.     if(from == me->p_num)
  38.         color = W_White;
  39.     else if(players[from].p_team == 0)
  40.         color = W_Blue;
  41.     else
  42.         color = W_Red;
  43.     } else {
  44.     sprintf(mbuf, "  ?->");
  45.     color = W_White;
  46.     }
  47.     
  48.     if(to == M_ALL) {
  49.     strcat(mbuf, "All ");
  50.     mw = messwin[MW_ALL];
  51.     } else if(to < MAXPLAYERS) {
  52.     sprintf(mbuf+5, "%c   ", players[to].p_char);
  53.     mw = messwin[MW_INDIV];
  54.     } else if(to == M_RED) {
  55.     sprintf(mbuf+5, "Red ");
  56.     mw = messwin[MW_TEAM];
  57.     } else if(to == M_BLUE) {
  58.     sprintf(mbuf+5, "Blu ");
  59.     mw = messwin[MW_TEAM];
  60.     } else {
  61.     sprintf(mbuf+5, "?   ");
  62.     mw = messwin[MW_ALL];
  63.     }
  64.  
  65.     strcat(mbuf, msg);
  66.     
  67.     W_WriteText(mw, 0, 0, color, mbuf, strlen(mbuf), W_RegularFont);
  68.     W_WriteText(messwin[MW_JOINED], 0, 0, color, mbuf, strlen(mbuf), W_RegularFont);
  69. }
  70.  
  71. void redraw_message_win()
  72. {
  73.     char buf[81];
  74.     char hdr_buf[10];
  75.  
  76.     W_ClearWindow(typewin);
  77.     if(dest < 0)
  78.     return;
  79.     if(dest == M_ALL)
  80.     strcpy(hdr_buf, "All");
  81.     else if(dest < MAXPLAYERS)
  82.     sprintf(hdr_buf, "%c  ", players[dest].p_char);
  83.     else if(dest == M_RED)
  84.     sprintf(hdr_buf, "Red");
  85.     else if(dest == M_BLUE)
  86.     sprintf(hdr_buf, "Blu");
  87.     else
  88.     sprintf(hdr_buf, "???");
  89.  
  90.     sprintf(buf, "You->%s %s_", hdr_buf, mess_buf);
  91.     W_WriteText(typewin, 0, 0, W_White, buf, strlen(buf), W_RegularFont);
  92. }
  93.  
  94. void message_event(W_Event *ev)
  95. {
  96.     if(ev->type == W_EV_KEY) {
  97.     if(dest < 0) {
  98.         if(ev->Window == messwin[MW_ALL])
  99.         dest = M_ALL;
  100.         else if(ev->Window == messwin[MW_TEAM])
  101.         dest = (me->p_team == 0) ? M_BLUE : M_RED;
  102.         else {
  103.         switch(ev->key) {
  104.           case '\033':
  105.             end_message();
  106.             break;
  107.           case 'A':
  108.             dest = M_ALL;
  109.             break;
  110.           case 'T':
  111.             if(me->p_team == 0)
  112.             dest = M_BLUE;
  113.             else
  114.             dest = M_RED;
  115.             break;
  116.           case 'R':
  117.             dest = M_RED;
  118.             break;
  119.           case 'B':
  120.             dest = M_BLUE;
  121.             break;
  122.           default:
  123.             if(ev->key >= '0' && ev->key <= '9')
  124.             dest = ev->key - '0';
  125.             else if(ev->key >= 'a' && ev->key <= 'v')
  126.             dest = ev->key - 'a' + 10;
  127.             else
  128.             dest = -1;
  129.         }
  130.         redraw_message_win();
  131.         return;
  132.         }
  133.     }
  134.     switch(ev->key) {
  135.       case 10:
  136.       case 13:
  137.         sendMessage(mess_buf, dest);
  138.         if(dest != M_ALL && dest != me->p_num && dest != me->p_team + M_BLUE)
  139.         print_message(mess_buf, me->p_num, dest);
  140.         mess_pos = 0;
  141.         mess_buf[0] = 0;
  142.         dest = -1;
  143.         redraw_message_win();
  144.         if(message_mode)
  145.         end_message();
  146.         return;
  147.       case 8:
  148.       case 127:
  149.         if(mess_pos > 0) {
  150.         mess_pos--;
  151.         mess_buf[mess_pos] = 0;
  152.         redraw_message_win();
  153.         }
  154.         return;
  155.       case '\033':    
  156.         mess_pos = 0;
  157.         mess_buf[0] = 0;
  158.         dest = -1;
  159.         redraw_message_win();
  160.         if(message_mode)
  161.         end_message();
  162.         return;
  163.       default:
  164.         if(mess_pos < 70) {
  165.         mess_buf[mess_pos++] = ev->key;
  166.         mess_buf[mess_pos] = 0;
  167.         redraw_message_win();
  168.         }
  169.         return;
  170.     }
  171.     } else if(ev->type == W_EV_EXPOSE) {
  172.     redraw_message_win();
  173.     }
  174. }
  175.     
  176.